package org.springblade.common.exception;

import org.springblade.common.constant.BizConstant;
import org.springblade.core.tool.api.IResultCode;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.Func;

import java.util.Collection;
import java.util.Map;

/**
 * 保留版权 : CopyRright (c) 2024-2024 于继业 版权所有
 * 文件名称 : AssertServiceUtil
 * 文件编号 : 1-1-1
 * 文件版本 : 2024-04-14.01
 * 创建日期 : 2024-04-14
 * 修改人名 :
 * 修改日期 :
 * 功能描述 :
 *
 * @author 于继业
 */
public class AssertServiceUtil {

	/**
	 * 断言这个 boolean 为 true
	 * <p>为 false 则抛出异常</p>
	 *
	 * @param expression boolean 值
	 * @param result     API返回封装
	 */
	public static void isTrue(boolean expression, IResultCode result) {
		if (!expression) {
			throw BizException.build(BizConstant.SERVICE_RECOED_NOT_EXIST);
		}
	}

	/**
	 * 断言这个 boolean 为 false
	 * <p>为 true 则抛出异常</p>
	 *
	 * @param expression boolean 值
	 * @param result     API返回封装
	 */
	public static void isFalse(boolean expression, IResultCode result) {
		isTrue(!expression, result);
	}

	/**
	 * 断言这个 object 为 null
	 * <p>不为 null 则抛异常</p>
	 *
	 * @param object 对象
	 * @param result API返回封装
	 */
	public static void isNull(Object object, IResultCode result) {
		isTrue(Func.isNull(object), result);
	}

	/**
	 * 断言这个 object 不为 null
	 * <p>为 null 则抛异常</p>
	 *
	 * @param object 对象
	 * @param result API返回封装
	 */
	public static void notNull(Object object, IResultCode result) {
		isTrue(!Func.isNull(object), result);
	}

	/**
	 * 断言这个 value 不为 empty
	 * <p>为 empty 则抛异常</p>
	 *
	 * @param value  字符串
	 * @param result API返回封装
	 */
	public static void notEmpty(String value, IResultCode result) {
		isTrue(Func.isNotBlank(value), result);
	}

	/**
	 * 断言这个 collection 不为 empty
	 * <p>为 empty 则抛异常</p>
	 *
	 * @param collection 集合
	 * @param result     API返回封装
	 */
	public static void notEmpty(Collection<?> collection, IResultCode result) {
		isTrue(CollectionUtil.isNotEmpty(collection), result);
	}

	/**
	 * 断言这个 map 不为 empty
	 * <p>为 empty 则抛异常</p>
	 *
	 * @param map    集合
	 * @param result API返回封装
	 */
	public static void notEmpty(Map<?, ?> map, IResultCode result) {
		isTrue(CollectionUtil.isNotEmpty(map), result);
	}

	/**
	 * 断言这个 数组 不为 empty
	 * <p>为 empty 则抛异常</p>
	 *
	 * @param array  数组
	 * @param result API返回封装
	 */
	public static void notEmpty(Object[] array, IResultCode result) {
		isTrue(Func.isNotEmpty(array), result);
	}
}
